package com.jh.tools.common;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.view.KeyEvent;
import android.widget.Toast;

import java.util.Stack;

/**
 * 应用程序Activity管理类：用于Activity管理和应用程序退出 
 * @author liux (http://my.oschina.net/liux) 
 * @version 1.0 
 * @created 2012-3-21 
 */  
public class AppManager {  
      
    private static Stack<Activity> activityStack;
    private static AppManager instance;
    private long mExitTime;
    private AppManager(){}  
    /** 
     * 单一实例 
     */  
    public static AppManager getAppManager(){  
        if(instance==null){  
            instance=new AppManager();  
        }  
        return instance;  
    }  
    /** 
     * 添加Activity到堆栈 
     */  
    public void addActivity(Activity activity){  
        if(activityStack==null){  
            activityStack=new Stack<Activity>();  
        }  
        activityStack.add(activity);  
    }  
    /** 
     * 获取当前Activity（堆栈中最后一个压入的） 
     */  
    public Activity currentActivity(){
        Activity activity=null;
        if (null!=activityStack&&activityStack.size()>0) {
             activity = activityStack.lastElement();
        }
//        if (null==activity){
//            activity= (ActivityManager) InstanceUtilApplication.getmContext().getSystemService(Context.ACTIVITY_SERVICE);
//        }
        return activity;  
    }  
    /** 
     * 结束当前Activity（堆栈中最后一个压入的） 
     */  
    public void finishActivity(){
        if (null!=activityStack) {
            Activity activity = activityStack.lastElement();
            finishActivity(activity);
        }
    }  
    /** 
     * 结束指定的Activity 
     */  
    public void finishActivity(Activity activity){  
        if(activity!=null){  
            activityStack.remove(activity);  
            activity.finish();  
        }
    }  
    /** 
     * 结束指定类名的Activity 
     */  
    public void finishActivity(Class<?> cls){  
        for (Activity activity : activityStack) {  
            if(activity.getClass().equals(cls) ){  
                finishActivity(activity);  
            }  
        }  
    }

    /**
     * 检测是否存在当前的Activty
     * @param pActivity
     * @return
     */
    public boolean judgeActivity(Activity pActivity){
        boolean judg=false;
        if (null==pActivity){
            return false;
        }else {
            for (Activity activity : activityStack) {
                if (activity.getClass().getName().equals(pActivity.getClass().getName())) {
                    judg = true;
                }
            }
        }
        return judg;
    }
    /** 
     * 结束所有Activity 
     */  
    public void finishAllActivity(){
        if (null!=activityStack) {
            for (int i = 0, size = activityStack.size(); i < size; i++) {
                if (null != activityStack.get(i)) {
                    activityStack.get(i).finish();
                }
            }
            activityStack.clear();
        }
    }  
    /** 
     * 退出应用程序 
     */  
    public void AppExit(Context context) {
        try {
            finishAllActivity();
            ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            activityMgr.restartPackage(context.getPackageName());  
            System.exit(0);  
        } catch (Exception e) { }  
    }
}